日期：2023/7/25 出题人：\href{ https://b23.tv/FM0evat}{Maxy}\\

\begin{minted}[mathescape,	
    linenos,
    numbersep=5pt,
    gobble=2,
    frame=lines,
    framesep=2mm]{c++}
    #include<iostream>
    class ComponentBase{
    protected:
        static inline std::size_t component_type_count = 0;
    };
    template<typename T>
    class Component : public ComponentBase{
    public:
        //todo...
        //使用任意方式更改当前模板类，使得对于任意类型X，若其继承自Component
    
        //则X::component_type_id()会得到一个独一无二的size_t类型的id（对于不同的X类型返回的值应不同）
        //要求：不能使用std::type_info（禁用typeid关键字），所有id从0开始连续。
    };
    class A : public Component<A>
    {};
    class B : public Component<B>
    {};
    class C : public Component<C>
    {};
    int main()
    {
        std::cout << A::component_type_id() << std::endl;
        std::cout << B::component_type_id() << std::endl;
        std::cout << B::component_type_id() << std::endl;
        std::cout << A::component_type_id() << std::endl;
        std::cout << A::component_type_id() << std::endl;
        std::cout << C::component_type_id() << std::endl;
    }
\end{minted}

\begin{tcolorbox}[title = {要求运行结果},
        fonttitle = \bfseries, fontupper = \sffamily, fontlower = \itshape]
    0\\
    1\\
    1\\
    0\\
    0\\
    2
\end{tcolorbox}

\begin{itemize}
    \item \textbf{难度}： \hardscore{1} \\
          \textbf{提示}：初始化。
\end{itemize}